 //zoj 3370  特别注意是完全对称性，因为不管一个点染黑色和白色，结果是一样的，与2-sat是有区别的。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<algorithm>
#include<iostream>
#include<string>
#include<cmath>
#include<queue>
#include<vector>
#include<map>
#include<stack>
using namespace std;
const double eps= 1e-7;
const int maxn=1305, maxe=3000000;
int first[maxn],next[maxe],E[maxe],M;
int dcmp(double x)
{
	return (x>eps)-(x<-eps);
}
void init()
{
	M=-1;
	memset(first,-1,sizeof(first));
}
void insert(int a,int b)
{
	M++;
	next[M]=first[a];
	first[a]=M;
	E[M]=b;	
}
/*************具有完全对称性的 广搜黑白染色型写法******************/
int cnt;
int q[maxn],fr,ed;
int sel[maxn],flag,cas;
void satinit(int n)
{
	cnt=n;
}
bool solve()
{
	int i,u,v,e;
	memset (sel, 0, sizeof(sel));
	for (i=0; i<cnt; i++) 
	if (!sel[i])
	{
		sel[i]=1;
		fr=ed=0;
		q[ed++]=i;
		while(fr<ed)
		{
			u=q[fr++];
			for(e=first[u]; e!=-1; e=next[e])
			{
				v=E[e];
				if(!sel[v])
				{
					sel[v]=3-sel[u];
					q[ed++]=v;
				}
				else if(sel[v]==sel[u])	return 0;
			}
		}
	}
	return 1;
}
/**************具有完全对称性的 广搜黑白染色型写法****************/
struct node
{
	double x,y;
	void rd()
	{	scanf("%lf%lf",&x,&y);
	}
}p[1233];
double dist(node a,node b)
{
	double x,y;
	x=a.x-b.x;y=a.y-b.y;
	return x*x+y*y;
}
int n;
int main()
{	
	#ifndef ONLINE_JUDGE
	freopen("in","r",stdin);
	//freopen("out","w",stdout);
#endif
	int i,j,k;
	while(scanf("%d",&n)!=EOF)
	{
		for(i=0; i<n; i++)	
			p[i].rd();
		double l=0,r=0;
		for(i=0; i<n; i++)
		for(j=i+1; j<n; j++)
		{
			r=max(r,dist(p[i],p[j]));
		}
		satinit(n);
		double mid,ans=0;
		k=1000;
		while(l<=r)
		{
			mid=(l+r)/2;
			init();
			for(i=0; i<n;i++)
			{
				for(j=i+1; j<n; j++)
				{
					if(dist(p[i],p[j]) - mid*mid<=0)
					{
						insert(i,j);
						insert(j,i);
					}
				}
			}
			if(solve())
			{
				ans=mid;
				l=mid+eps;
			}
			else
			{
				r=mid-eps;
			}
		}
		init();
		for(i=0; i<n;i++)
		{
			for(j=i+1; j<n; j++)
			{
				if(dist(p[i],p[j]) - ans*ans<=0)
				{
					insert(i,j);
					insert(j,i);
				}
			}
		}
		solve();
		printf("%.6lf\n",ans/2);
		for(i=0; i<n-1; i++)
		{
			if(sel[i]==1)
				printf("%d ",1);
			else 
				printf("%d ",2);
		}
		if(sel[i]==1)
			printf("%d\n",1);
		else 
			printf("%d\n",2);
		
	}
}
